
package org.amos.upms.modules.system.service;

import com.baomidou.mybatisplus.extension.service.IService;
import org.amos.upms.modules.system.dto.MenuListDTO;
import org.amos.upms.modules.system.entity.Menu;
import org.amos.upms.modules.system.vo.MenuTreeVO;
import org.amos.upms.modules.system.vo.MenuVO;

import java.util.List;
import java.util.Set;

/**
 * <p>
 * 系统菜单 服务类
 * </p>
 *
 * @author CodeGenerator
 * @since 2020-12-20
 */
public interface IMenuService extends IService<Menu> {
    /**
     * 删除菜单数据
     *
     * @param ids
     * @return
     */
    Boolean remove(Set<Long> ids);

    /**
     * @param menu
     * @return
     */
    Long saveOrUpdateMenu(Menu menu);

    /**
     * 菜单权限树形结构
     *
     * @param roleIds
     * @return
     */
    List<MenuVO> permissions(Set<Long> roleIds);

    /**
     * 菜单树形结构
     *
     * @param roleIds
     * @return
     */
    List<MenuVO> routes(Set<Long> roleIds);

    /**
     * 根据租户查询菜单(树形)
     *
     * @return
     */
    List<MenuVO> selectTree();

    /**
     * 查询所有菜单(树形)
     *
     * @param dto
     * @return
     */
    List<MenuVO> selectTree(MenuListDTO dto);

    /**
     * 根据用户查询所有接口权限
     *
     * @param userId
     * @return
     */
    Set<String> selectUserPermissions(Long userId);

    /**
     * 根据用户查询所有菜单(树形)
     *
     * @param userId
     * @return
     */
    List<MenuTreeVO> selectUserTree(Long userId);

    /**
     * 根据用户查询所有菜单ID
     *
     * @param userId
     * @return
     */
    List<Long> selectUserTreeID(Long userId);

    /**
     * 根据租户套餐查询所有菜单ID
     *
     * @param packageId 租户套餐ID
     * @return
     */
    List<Long> selectPackageTreeID(Long packageId);

    /**
     * 根据角色查询所有菜单ID
     *
     * @param roleId
     * @return
     */
    List<Long> selectRoleTreeID(Long roleId);

    /**
     * 生成前端页面菜单数据
     *
     * @param menus
     * @return
     */
    List<MenuVO> buildMenus(List<Menu> menus);

    /**
     * 构建菜单树
     *
     * @param menus
     * @return
     */
    List<MenuTreeVO> buildTree(List<Menu> menus);

    /**
     * 获取自己级上级菜单
     *
     * @param id    当前菜单id
     * @param menus
     * @return
     */
    List<Menu> getParentMenus(Long id, List<Menu> menus);

    /**
     * 获取当前用户菜单数据
     *
     * @param userId
     * @param menuType
     * @return
     */
    List<Menu> getUserMenu(Long userId, Integer menuType);

    /**
     * 刷新当前用户菜单
     *
     * @param ids
     * @return
     */
//    @CacheBatchEvict(cacheNames={})
    Boolean updateMenu(Set<Long> ids);
}
